/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package fase2.pt.iul.sid.controller;

import fase2.pt.iul.sid.database.ComentarioAoEstabelecimentoDAO;
import fase2.pt.iul.sid.database.ComentarioAoPratoDAO;
import fase2.pt.iul.sid.database.EstabelecimentoDAO;
import fase2.pt.iul.sid.database.FactoryConnection;
import fase2.pt.iul.sid.database.PratoDAO;
import fase2.pt.iul.sid.model.ComentarioAoEstabelecimentoModel;
import fase2.pt.iul.sid.model.ComentarioAoPratoModel;
import fase2.pt.iul.sid.model.EstabelecimentoModel;
import fase2.pt.iul.sid.model.PratoModel;
import fase2.pt.iul.sid.view.Comentarios;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.LinkedList;
import java.util.List;

/**
 *
 * @author Ricardo Marques
 */
public class ComentariosController {
    
    private FactoryConnection fc = null;
    private Comentarios comentariosView = null;
    private ComentarioController comentarioController = null;
    private EstabelecimentoModel estabelecimento = null;
    private PratoModel prato = null;
    private String email_user_logon = null;
    private int numPagina = 0;
    
    public ComentariosController(FactoryConnection fc, String email_user_logon){
        this.fc=fc;
        this.email_user_logon = email_user_logon;
    }
    
    public void verListaComentariosPrato(int id_prato, int numero_comentarios_por_pagina, int numero_pagina){
        
        if(numero_pagina<=0){
            numero_pagina=1;
        }
        
        PratoDAO ed = new PratoDAO(fc);
        prato = ed.getPrato(id_prato);
        
        numPagina = numero_pagina;
        
        ComentarioAoPratoDAO cd = new ComentarioAoPratoDAO(fc);
        List<ComentarioAoPratoModel> lista_ce = cd.getListaComentarios(id_prato, numero_comentarios_por_pagina, numero_pagina);
        
        comentariosView = new Comentarios();
        comentariosView.verListaComentariosPrato(prato, lista_ce);
        
        comentariosView.getjComboBox1().setSelectedIndex(numero_comentarios_por_pagina-1);
        comentariosView.getjLabel3().setText(""+numero_pagina);
        
        
        comentariosView.adcionarBtnsListner(new ListnerBtnsComentarios());
        comentariosView.adcionarListner(new ListnerComentarios());
        
    }
    
    public void verListaComentariosEstabelecimento(int id_estabelecimento, int numero_comentarios_por_pagina, int numero_pagina ){
        
        if(numero_pagina<=0){
            numero_pagina=1;
        }
        
        EstabelecimentoDAO ed = new EstabelecimentoDAO(fc);
        estabelecimento = ed.getEstabelecimento(id_estabelecimento);
        
        numPagina = numero_pagina;
        
        ComentarioAoEstabelecimentoDAO cd = new ComentarioAoEstabelecimentoDAO(fc);
        List<ComentarioAoEstabelecimentoModel> lista_ce = cd.getListaComentarios(id_estabelecimento, numero_comentarios_por_pagina, numero_pagina);
        
        comentariosView = new Comentarios();
        comentariosView.verListaComentariosEstabelecimento(estabelecimento, lista_ce);
        
        comentariosView.getjComboBox1().setSelectedIndex(numero_comentarios_por_pagina-1);
        comentariosView.getjLabel3().setText(""+numero_pagina);
        
        
        comentariosView.adcionarBtnsListner(new ListnerBtnsComentarios());
        comentariosView.adcionarListner(new ListnerComentarios());

    }
    
    public void sair(){
        comentariosView.dispose();
    }
    
    class ListnerBtnsComentarios implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e) {
            
            
            if (e.getSource() == comentariosView.getjButton1()) {
                
                comentariosView.dispose();
                if(estabelecimento!=null){
                    verListaComentariosEstabelecimento(estabelecimento.getAtributeIdEstablecimento(), comentariosView.getjComboBox1().getSelectedIndex()+1, numPagina+1);
                }else if(prato!=null){
                    verListaComentariosPrato(prato.getIdPrato(), comentariosView.getjComboBox1().getSelectedIndex()+1, numPagina+1);
                }
                
                
            }
            else if(e.getSource() == comentariosView.getjButton2()){
                
                comentariosView.dispose();
                if(estabelecimento!=null){
                    verListaComentariosEstabelecimento(estabelecimento.getAtributeIdEstablecimento(), comentariosView.getjComboBox1().getSelectedIndex()+1, numPagina-1);
                }else if(prato!=null){
                    verListaComentariosPrato(prato.getIdPrato(), comentariosView.getjComboBox1().getSelectedIndex()+1, numPagina-1);
                }
            }
            else if(e.getSource() == comentariosView.getjButton3()){
                
                int id_estabelecimento = 0;
                int id_prato = 0;
                String email_utilizador_criou_comentario = "";
                if(comentariosView.getjTable1().getSelectedRow() != -1){
                    id_estabelecimento = Integer.parseInt(comentariosView.getAuxVectorSelection().get(comentariosView.getjTable1().getSelectedRow()).get(0).toString());
                    id_prato = Integer.parseInt(comentariosView.getAuxVectorSelection().get(comentariosView.getjTable1().getSelectedRow()).get(1).toString());
                    email_utilizador_criou_comentario = (String) comentariosView.getjTable1().getValueAt(comentariosView.getjTable1().getSelectedRow(), 2);
                }
                
                if(id_estabelecimento!=0 || id_prato!=0){
                    comentarioController =  new ComentarioController(fc, null, comentariosView);
                    
                    if(estabelecimento!=null){
                        comentarioController.verComentarioEstabelecimento(id_estabelecimento, email_user_logon, email_utilizador_criou_comentario);
                    }else if(prato!=null){
                        comentarioController.verComentarioPrato(id_prato, id_estabelecimento, email_user_logon, email_utilizador_criou_comentario);
                    }
                    
                }
                
            }
            else if(e.getSource() == comentariosView.getjButton4()){
                
                sair();
                
            }
            else{ 
                
            }
        }
        
    }
    
    class ListnerComentarios implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e) {
            
            comentariosView.dispose();
            
            if(estabelecimento!=null){
                verListaComentariosEstabelecimento(estabelecimento.getAtributeIdEstablecimento(), comentariosView.getjComboBox1().getSelectedIndex()+1, 1);
            }else if(prato!=null){
                verListaComentariosPrato(prato.getIdPrato(), comentariosView.getjComboBox1().getSelectedIndex()+1, 1);
            }
        }
        
    }
    
}
